package org.bits.data;

/*******************************************************************************
 * 
 ******************************************************************************/
public abstract class Field<T>
{
    /**  */
    private final String name;
    /**  */
    private final FieldType type;
    /**  */
    private final Class<?> fieldClass;

    /***************************************************************************
     * Constructor
     * @param name
     * @param type
     **************************************************************************/
    public Field( String name, FieldType type, Class<?> fieldClass )
    {
        this.name = name;
        this.type = type;
        this.fieldClass = fieldClass;
    }

    /***************************************************************************
     * Returns the name of this field.
     * @return
     **************************************************************************/
    public String getName()
    {
        return name;
    }

    /***************************************************************************
     * @return
     **************************************************************************/
    public Class<?> getFieldClass()
    {
        return fieldClass;
    }

    /***************************************************************************
     * @param item
     * @return
     **************************************************************************/
    public abstract Object getValue( T item );

    /***************************************************************************
     * @return
     **************************************************************************/
    public int getDefaultColumnWidth()
    {
        return -1;
    }

    /***************************************************************************
     * Returns the type of this field.
     * @return
     **************************************************************************/
    public FieldType getType()
    {
        return type;
    }
}
